package mylab.starters.oss;

import mylab.starters.oss.config.OssProperties;
import mylab.utils.spring.spi.AbstractTemplate;
import mylab.utils.spring.spi.SpiProperties;

/**
 * <p>
 * Oss 抽象类
 * </p>
 */
public abstract class AbstractOssTemplate<P extends SpiProperties> extends AbstractTemplate<P> implements OssTemplate {
    protected final OssRule ossRule;

    public AbstractOssTemplate(P properties, OssRule ossRule) {
        super(properties);
        this.ossRule = ossRule;
    }

    /**
     * 根据配置文件获取存储桶名称
     *
     * @return 存储桶名称
     */
    protected String getBucketName() {
        String defaultBucketName = "UNNAMED_BUCKET";
        OssProperties.CommonOssProperties ossProperties = (OssProperties.CommonOssProperties) properties;

        return getBucketName(defaultBucketName);
    }

    /**
     * 根据规则生成存储桶名称
     *
     * @param bucketName 存储桶名称
     * @return 存储桶名称
     */
    protected String getBucketName(String bucketName) {
        return ossRule.bucketName(bucketName);
    }

    /**
     * 根据规则生成文件名称
     *
     * @param fileName 文件名称
     * @return 文件名称
     */
    protected String getFileName(String fileName) {
        return ossRule.fileName(fileName);
    }
}
